DUA0:<VAXC>VAXCSPR.DAT;6





   Software Performance Reports for VAX C, Version 1.5.

   Software Performance Reports for VAX C, Version 1.5.

   Software Performance Reports for VAX C, Version 1.5.


   11-52265   Exit  handlers  established  by  certain  run-time  library
              routines  (notably fdopen, fopen, and setbuf) were found to
              corrupt one longword of user memory after the exit  handler
              was invoked.  This problem has been fixed in V1.3.

   11-52472   Programs containing a function that was defined  as  having
              no  arguments,  but  that  returned  a  structure or union,
              failed at run time during execution of the function.   This
              problem has been fixed in V1.3.

   11-52935   Prior to V1.3, the compiler sometimes bug  checked  if  the
              command  line  specified more than one source file when the
              files  were  separated  by  commas   and   used   different
              combinations of command line qualifiers.

   11-53564   The compiler bug checked when it encountered an  assignment
              expression of the form:

                   a [i] = expr

              if the variable "i" had been promoted to a register and the
              expression,  "expr",  contained  a  conditional expression.
              This problem was fixed in V1.3.

   11-53805   Under certain circumstances, an expression involving either
              the  logical AND (&&) or logical OR (||) operator where the
              left-hand operand was a constant would cause  the  compiler
              to  fail  with  a  bug  check diagnostic message during the
              parser phase.  This problem has been corrected in V1.3.

   11-54798   The compiler incorrectly optimized a series of  conversions
              in  which  the  original  source value was a floating-point
              constant and the target value was a longword integer.  This
              problem was corrected in V1.3.

   11-54804   It was reported that a compilation failed with a bug  check
              during  the  parser phase if a NOSTRDEF warning message had
              been issued against a declaration of an array of structures
              with  an  initializer  list.  This problem was corrected in
              V1.3.

   11-55076   The VAX C compiler incorrectly calculated the address of an
              element  of  a  multidimensional  array of any type (except
              char), and which was a member of an  array  of  structures.
              This problem has been corrected in V1.3.

   11-56265   The VAX C run-time functions fseek, lseek, and  rewind  did
              not  work  with  record  files  when  the  file  was  being
              positioned to the beginning of the file.   This  error  was
              fixed in V1.4.

   11-56389   See HELP CC RELEASE_NOTES V1_4 EXEC_CHANGES.


































                                                                   Page 2


   11-56684   If an expression involving the comma operator  appeared  in
              the  context of a test (such as within a while condition or
              if statement) and the rightmost operand of the  comma  list
              was  an expression involving a logical AND or OR operation,
              none of the preceding expressions in the  comma  list  were
              evaluated.  This problem was fixed in V1.3.

   11-56763   See HELP CC RELEASE_NOTES V1_4 CR_CTRL.

   11-56975   When using the VAX C run-time function fscanf to read  from
              two  files, a read from the second file caused a read error
              on the first.  This problem was fixed in V1.4.

   11-57152   The VAX C run-time  functions  scanf,  sscanf,  and  fscanf
              returned 1 instead of 0 when the input string did not match
              the conversion specification.  This problem  was  fixed  in
              V1.4.

   11-57556   Under  certain  circumstances,  the  compiler   failed   to
              generate code to set "a[j]" in an expression of the form "i
              = a[j] = ...;".  This problem was fixed in V1.3.

   11-57568   The compiler bugchecked during the  parser  phase  when  an
              arithmetic  expression  was specified as the operand of the
              '&' ("address of") operator.  Such an expression is invalid
              in  this  context.   The  problem was fixed in V1.3 and the
              compiler now issues the INVADDR error message against  such
              usage.

   11-57891   The compiler was found to fail with a BUGCHECK  during  the
              optimization  phase  if the source program contained any of
              several kinds of references to a member of a  structure  or
              union  that  was declared without a tag name.  This problem
              was fixed in V1.3.

   11-57998   Prior to V1.4, there was an error in  the  VAX  C  run-time
              function  mktemp.   If  the  file  name  first  constructed
              represented an existing file, the wrong  character  of  the
              template  was  changed.  For example, if the process id was
              123456 and the file "nam123456."  existed,  the  next  file
              name to be tried would be "aam123456." This error was fixed
              in V1.4.

   11-58005   See HELP CC RELEASE_NOTES V1_4 OPEN_FILE_LIMIT.

   11-58087   On the read of an empty file, fscanf returned 1 instead  of
              EOF.  This error was fixed in V1.4.

   11-58225   DESCRIP.H erroneously redefined the value of DSC$K_DTYPE_T.
              This error was fixed in V1.3.

   11-58873   An incorrect value was returned by the sizeof operator when
              its  operand  was  a  typedef name that defined an array of
              structures or a multidimensional array of any type, or  was
              an object declared with that typedef name.  The storage map





















                                                                   Page 3


              listing also showed an  incorrect  size  and  incorrect  or
              missing  array  bound  values for such items.  This problem
              was fixed in V1.4.

   11-59121   Prior to V1.4, the VAX C run-time library opened stdout and
              stderr  with  append access.  Thus, if one of these logical
              names was associated with a file that already existed,  the
              output  from  a  program was appended to the existing file.
              In V1.4, this behavior has  been  changed  so  that  a  new
              version  of  the  file  is  created,  with a version number
              higher than  the  existing  file.   This  new  behavior  is
              consistent with other VAX languages.

   11-59123   The library function FTELL returns  the  wrong  value  when
              called  immediately  after  EOF,  due to a partial fix of a
              problem concerning the VAX C RTL's imporper use of  an  RMS
              data structure.  This problem has been fixed in V1.5.

   11-59167   See HELP CC RELEASE_NOTES V1_4 READ_RESTRICTION.

   11-59411   Incorrect  object  code   was   generated   under   certain
              circumstances when both the qualifiers /DEBUG and /OPTIMIZE
              were in effect, which caused the corruption of  a  function
              return value.  This problem was fixed in V1.4.

   11-59529   Incorrect object code was generated when a float or  double
              control  variable  was  used  in  a  for loop.  The problem
              occurred only when a float or double control  variable  was
              compared  against  a  constant,  when the test was strictly
              less than or strictly greater than, and when the  increment
              had a fractional part.  This problem was fixed in V1.4.

   11-59531   Under  certain  circumstances,  the  compiler   incorrectly
              optimized  the  dereference  of  a  pointer.   This usually
              occurred when a pointer used in the dereference was  itself
              the   target   of   an   immediately  preceding  assignment
              expression  and  was  stored  in  the  SP  (stack  pointer)
              register.  This problem was fixed in V1.4.

   11-59733   The NESTEDCOMMENT  message  was  issued  erroneously  if  a
              comment  appeared  within  a macro reference.  This problem
              was fixed in V1.4.

   11-60094   See HELP CC RELEASE_NOTES V1_4 FTELL.

   11-60106   See HELP CC RELEASE_NOTES V1_4 ASTs.

   11-60243   A compilation failed with  a  bugcheck  during  the  parser
              phase  when  the  CC command line contained a comma list of
              source files in which a file other than the first contained
              a  malformed  function  definition  and in which one of the
              source files preceding the file with the malformed function
              definition  contained  one  or  more function declarations.
              This problem was fixed in V1.4.






















                                                                   Page 4


   11-60434   A bugcheck occurred during the parser phase if the  program
              contained an extraordinarily lengthy macro expansion and if
              /SHOW=EXPANSION or /SHOW=INTERMEDIATE was specified in  the
              command line.  This problem was fixed in V1.4.

   11-60654   See HELP CC RELEASE_NOTES V1_4 MIXED_IO.

   11-60659   See HELP CC RELEASE_NOTES V1_4 FTELL.

   11-60660   The setbuf routine did not  correctly  set  up  the  buffer
              count  field  in  the  file pointer block.  Previously, the
              routine did not correctly intialize the file  buffer  count
              to  BUFSIZ.  Thus, the buffer was assumed to be full.  This
              problem has been fixed in V1.4.  Note,  also,  that  setbuf
              requires  a  buffer  size  of  BUFSIZ,  that the buffer you
              supply must also have a size of BUFSIZ, and that by default
              terminal I/O is not buffered while file I/O is buffered.

   11-60866   See HELP CC RELEASE_NOTES V1_4 EXEC_CHANGES.

   11-60932   Incorrect object code was generated if a globalref  pointer
              was   the  operand  of  a  pre-increment  or  pre-decrement
              operator, and the result was  dereferenced.   This  problem
              was fixed in V1.4.

   11-60933   The  compiler  generated  incorrect  object  code   for   a
              comparison  of an unsigned short int value with a constant.
              This problem was fixed in V1.3.

   11-61183   See HELP CC RELEASE_NOTES V1_4 CREAT.

   11-61253   The compiler bugchecked during  optimizer  phase,  or  went
              into an infinite loop when /NOOPTIMIZE was specified.  This
              occurred when the program contained several cast operators.
              The problem was fixed in V1.4.

   11-61258   Expressions involving  "&"  (bitwise  AND)  may  have  been
              evaluated incorrectly if one of the operands was a constant
              consisting of a continuous string of bits in the low  order
              bit positions (for example, "0x3FF"), and the other operand
              was an integer variable (possibly modified by the unary "-"
              [minus]  or  " " [complement] operator) whose declared size
              was shorter than the number of bits  set  in  the  constant
              (for example, char).  This problem was fixed in V1.4.

   11-62438   See HELP CC RELEASE_NOTES V1_4 FTELL.

   11-62549   The "psect name" specified in a globaldef storage class and
              the  readonly storage class were ignored if the declaration
              was for a structure with a member declaration  list.   This
              problem was fixed in V1.4.

   11-62632   If  the   compiler   was   invoked   with   the   qualifier
              /LIST=SYS$OUTPUT,  the  listing contained three fewer lines
              per page than usual.  This problem was fixed in V1.4.





















                                                                   Page 5


   11-62836   When a function was declared to return an unsigned char  or
              unsigned  short,  the  compiler did not generate MOVZ (move
              zero-extended) instructions to move  the  return  value  to
              register  R0.   The undefined results were left in the high
              order bits of register R0.  This problem was fixed in V1.4.

   11-63056   Prior to V1.4, when a name appeared in a static declaration
              at  the  module  level  and  that  name also appeared in an
              extern declaration within a function body, both  names  did
              not  refer  to  the  same  data  object.  The V1.4 compiler
              detects when there is  a  lexically  previous  static  data
              object  and  uses  that  object  within  the  scope  of the
              function.

              It was also found that  the  longjmp  function  erroneously
              forced  the  return value to 1 when the value passed to the
              longjmp function was 0.  This behavior was  also  fixed  in
              V1.4.

   11-63475   Missing parentheses on  a  function  definition  when  that
              definition  was  preceeded by a function declaration caused
              the compiler to generate an incorrect function name.   This
              problem  was  fixed  in  V1.4;  the compiler now issues the
              MISSEDIT diagnostic against such a function definition.

   11-63562   When a function is declared implicitly, its characteristics
              are  extern  int.   Prior  to  V1.4,  when the function was
              subsequently  declared  to  be  a  static  function  of   a
              different  type,  no  diagnostic  was issued.  In V1.4, the
              CONFLICTDECL warning diagnostic is issued when  the  second
              declaration  is  encountered.   This  is  merely a warning,
              however.  Within the  main  function,  where  the  implicit
              declaration  occurred,  the  function  is  used  as  an int
              function.  When the function is later declared differently,
              the return value will be of the specified type; no coercion
              will take place.

   11-64133   The optimization of an  assignment  produced  invalid  code
              when the assignment contained an array index which was also
              an array expression (for  example,  a[b[i]]  =  5;).   This
              problem was fixed in V1.4.

   11-64228   When a typedef name for a structure was mistakenly used  as
              a  tag  name,  no diagnostic was issued.  The V1.4 compiler
              now issues the NOSTRDEF diagnostic against such usage.

   11-64752   If a program contains STATIC function definitions  as  well
              as  a  function  reference  whose  name  is used later in a
              #DEFINE control line, the compiler  will  BUGCHECK  on  the
              second  phase.   This problem will be fixed in V1.5 and can
              be circumvented by adding a #UNDEF control line at the  end
              of  the  program  to  cancel the previous definition of the
              identifier.

   11-65096   The library routines SCANF and FSCANF incorrectly reference





















                                                                   Page 6


              the  file  number  field of a FILE structure as a long word
              rather than a byte.  This problem was fixed in V1.4.

   11-65708   There is an incorrect flag setting due to a problem in  the
              module  C$$DOPRINT which implements the formatting required
              by FPRINTF.  This was fixed  V1.5.   This  problem  can  be
              circumvented  by  flushing  the  I/O  buffers after doing a
              write operation and before doing a read  operation,  or  by
              using  SPRINTF  to  format  output  and  FPUTS to write the
              output to the file.

   11-65802   The library function MALLOC fails to allocate  all  of  the
              available   virtual  memory.   The  RTL  retains  the  last
              "FREEed" block and re-allocates this block if large enough.
              If  not  large enough, the RTL allocates from the remaining
              virtual memory without FREEing the held memory.   This  has
              been fixed in V1.5.

   11-66818   In an IF statement, an UNSIGNED SHORT element of  an  array
              is incorrectly loaded into a register when the value of the
              element should be loaded.  This problem has been  fixed  in
              V1.5.

   11-65895   A TYPEDEF declaration that defines  a  type  equivalent  to
              that  found in a structure declaration, but not yet defined
              in the source text, elicits  a  NOSTRDEF  warning  message.
              The message that should be issued is the INVALINIT message.
              NOSTRDEF will only be issued when it is determined that the
              referenced structure must be fully defined in order for the
              reference to be valid.  This  problem  has  been  fixed  in
              V1.5.

   11-65897   The library function FCVT was handling the special case  of
              the  value  being zero (0) incorrectly; an ACCESS VIOLATION
              occurs.  This problem has been fixed in V1.5.

   11-66210   The routine that fills  the  buffer  for  the  FILE  always
              attempts  to read 512 characters, so, if there is less than
              512 characters left in the file, the library function FSEEK
              positions  the  FILE at EOF.  The current block number that
              is saved internally to the VAX C RTL is  left  pointing  at
              the  block  after the EOF, which results in the wrong value
              being returned  from  the  library  function  FTELL.   This
              problem has been fixed in V1.5.

   11-66237   In the example:

                   A_SIZE - (int)((struct _A *)0) -> c

              where "c" is undefined, the BUGCHECK is issued  instead  of
              an error message that states that "c" has not been declared
              within the current scope.  This problem has been  fixed  in
              V1.5.

   11-66330   The library function SCANF fails  if  function  SETBUF  has





















                                                                   Page 7


              been  invoked.   The  problem  has been fixed in V1.4.  See
              SPRs numbered 11-66210 and 11-65897.

   11-66989   Due to a logic error, the VAX C compiler  is  not  properly
              handling  the  alignment of AUTOMATIC and STATIC variables.
              This problem has been fixed in V1.5.

   11-67020   The library  function  WAIT  fails  to  check  whether  the
              specified address is non-zero.  This problem has been fixed
              in V1.5.

   11-67236   In a FOR loop, the  optimizer  incorrectly  assigns  values
              from a variable of longer length to an unsigned variable of
              shorter length.  This problem has been fixed in V1.5.

   11-67274   An error in optimization occurs in programs  that  use  the
              cast  operator  in  conjunction  with  a  &  or  a  |  when
              conversions from LONG to  SHORT  are  made.   Also,  errors
              occur   when  the  VAX  C  compiler  optimizes  code  using
              invariant expressions.  These errors  have  been  fixed  in
              V1.5.

   11-68431   In an & operation where one of the operands is  a  constant
              consisting of a contiguous string of low order bits and the
              other  is  a  pointer,  instead  of  issuing  the   message
              INVPTROPER,  the  compiler  incorrectly optimizes producing
              bad code.  The problem has been fixed in V1.5.

   11-69192   If a GLOBALDEF pointer is declared in one module  and  then
              if  the  GLOBALREF  is  dereferenced  in another module, as
              follows:

                   *(p + 0)

              then incorrect code is created by  the  optimizer  and  the
              dereference is lost.  This problem has been fixed in V1.5.

 $